package ln.javatest.day12.demo03;
/*
finally代码块
格式：
    try{
        可能产生异常的代码
    }catch(定义一个异常的变量，用来接收try中抛出的异常对象）{
        异常的处理逻辑，接收异常对象之后，怎么处理异常对象
        一般在工作中，会把异常的信息记录到一个日志中
    }
    ...
    catch(异常类名 变量名）{

    }finally{
        无论是否出现异常都会执行
    }
注意：
    1.finally不能单独使用，必须和try一起使用
    2.finally一般用于资源释放（资源回收），无论程序是否出现异常，最后都要资源释放（IO）
*/

import java.io.IOException;

public class Demo05TryCatchFinally {
    public static void main(String[] args) {
        try {
            readFile("d:\\a.tx");
        }catch(IOException e){ //try中抛出什么异常，catch就定义什么异常变量，用来接收这个异常对象
            //System.out.println("catch- 传递的文件后缀不是.txt");
            /*
            Throwable类中定义了3个异常处理的方法：(Throwable是异常的根类）
            String getMessage() 返回此throwable的简短描述。
            String toString() 返回此throwable的详细信息字符串
            void printStackTrace() JVM打印异常对象，默认此方法，打印的异常信息时最全面的
            */
            System.out.println(e.getMessage());
        }finally {
            System.out.println("资源释放");//无论程序是否出现异常,都要执行的
        }
        System.out.println("h后续代码");
    }
    /*
    如果传递的路径，不是.txt结尾
    那么我们就抛出IO异常对象，告知方法的调用者，文件的后缀名不对
    */
    public static void readFile(String fileName) throws IOException {
        if(!fileName.endsWith(".txt")){
            throw new IOException("文件的后缀名不对");
        }
        System.out.println("路径没有问题，读取文件");
    }
}
